package com.kinghood.productcenter.service.product;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kinghood.infrastructure.model.dto.StatusRemarkReqDTO;
import com.kinghood.productcenter.common.model.dao.product.ProductBaseDO;
import com.kinghood.productcenter.common.model.dao.product.ProductSkuBaseDO;
import com.kinghood.productcenter.common.model.dto.base.SkuQueryPageReqDTO;
import com.kinghood.productcenter.common.model.dto.product.GetProductReqDTO;
import com.kinghood.productcenter.common.model.dto.product.ProductDTO;
import com.kinghood.productcenter.common.model.dto.product.ProductExcelDaoDTO;
import com.kinghood.productcenter.common.model.dto.product.ProductReqDTO;
import com.kinghood.productcenter.common.model.dto.sku.GetProductSkuReqDTO;
import com.kinghood.productcenter.common.model.dto.sku.ProductSkuReqDTO;
import com.kinghood.productcenter.common.model.dto.sku.UpdateProductSkuReqDTO;
import com.kinghood.productcenter.common.model.vo.base.BaseAttributeVO;
import com.kinghood.productcenter.common.model.vo.product.ProductDetailVO;
import com.kinghood.productcenter.common.model.vo.product.ProductSkuListVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author KingHood
 * @since 2023-12-20
 */
public interface IProductSkuBaseService extends IService<ProductSkuBaseDO> {

    /**
     * 添加sku
     *
     * @param in          入参
     * @param productId 商品
     * @param attributeVOMap 属性
     * @param skuCodeMap 旧数据
     * @return sku
     * @author zfj
     * @date 2023/12/25
     */
    List<ProductSkuBaseDO> addSku(List<ProductSkuReqDTO> skuList, Long productId, Map<String, BaseAttributeVO> attributeVOMap, Map<String, Long> skuCodeMap);

    /**
     * 删除
     *
     * @param id 商品id
     * @author zfj
     * @date 2023/12/26
     */
    void deleteByProductId(Long id);

    /**
     * sku编码
     *
     * @param  productId 商品id
     * @return sku编码
     * @author zfj
     * @date 2023/12/28
     */
    List<String> getSkuCodeList(Long productId);

    /**
     * 根据商品id或者sku
     *
     * @param id 商品id
     * @return sku
     * @author zfj
     * @date 2024/1/11
     */
    Map<String, Long> getSkuByProductId(Long id);

    /**
     * 根据搜索条件获取sku列表
     *
     * @param in 搜索条件
     * @return sku
     * @author zfj
     * @date 2024/1/17
     */
    Object queryPage(SkuQueryPageReqDTO in);

    /**
     * 叶片sku
     *
     * @param in 在里面
     * @return @return {@link Page }<{@link ProductSkuListVO }>
     * @author jp
     * @date 2024/01/23 16:59
     */
    Page<ProductSkuListVO> listSku(SkuQueryPageReqDTO in);

    /**
     * sku详情
     *
     * @param in id
     * @return sku
     * @author zfj
     * @date 2024/1/17
     */
    ProductDTO getProductSku(GetProductSkuReqDTO in);

    /**
     * 获取sku属性
     *
     * @param businessCode 业务代码
     * @return @return {@link Object }
     * @author jp
     * @date 2024/01/23 15:26
     */
    Object getSkuFields(String businessCode);

    /**
     * 获取sku搜索属性
     *
     * @param businessCode 业务代码
     * @return @return {@link Object }
     * @author jp
     * @date 2024/01/23 15:26
     */
    Object getSkuSearchFields(String businessCode);

    /**
     * 批量导入sku
     * @param productDaoList 导入数据
     * @author zfj
     * @date 2024/1/27
     */
    void saveProductSkuDao(List<ProductExcelDaoDTO> productDaoList);

    /**
     * 更新sku状态
     *
     * @param param 参数
     * @return
     * @author jp
     * @date 2024/01/29 11:45
     */
    void updateSkuStatus(StatusRemarkReqDTO param);

    /**
     * 删除sku
     *
     * @param id 身份证件
     * @return
     * @author jp
     * @date 2024/01/29 11:59
     */
    void delSku(Long id);
}
